字符串内建函数

您所在的位置:网站首页 freemarker map 添加list 字符串内建函数

字符串内建函数

2024-04-20 13:51| 来源: 网络整理| 查看: 265

PreviousNext 字符串内建函数 Page Contents booleancap_firstcapitalizechop_linebreakcontainsdate, time, datetimeends_withensure_ends_withensure_starts_withgroupshtmlindex_ofj_stringjs_stringjson_stringkeep_afterkeep_after_lastkeep_beforekeep_before_lastlast_index_ofleft_padlengthlower_casematchesnumberreplaceright_padremove_beginningremove_endingrtfsplitstarts_withstring (当被用作是字符串值时)substring (已废弃)trimuncap_firstupper_caseurlurl_pathword_listxhtmlxml通用标志

这些内建函数作用于表达式左侧的字符串值。 如果左侧值是数字或日期/时间/日期-时间或布尔类型(从 2.3.20 版本开始), 根据当前的number-, date/time/date-time- 和 boolean-format设置, 那么它会自动被转成字符串值(当使用${...} 插入这些值时,应用的都是一样的格式程序)。

boolean

字符串转为布尔值。字符串必须是 true 或 false (大小写敏感!),或者必须是由 boolean_format 设置的特定格式。

如果字符串不是适当的格式,那么当访问该内建函数时, 就会发成错误终止模板处理。

cap_first

字符串中的首单词的首字母大写。 关于"单词"的准确意义,可以参考 word_list 内建函数。 例如:

${" green mouse"?cap_first} ${"GreEN mouse"?cap_first} ${"- green mouse"?cap_first}

将会输出:

Green mouse GreEN mouse - green mouse

In the case of "- green mouse", the first word is the -.

capitalize

字符串中所有单词的首字母大写。 关于"单词"的准确意义,可以参考 word_list 内建函数。例如:

${" green mouse"?capitalize} ${"GreEN mouse"?capitalize}

将会输出:

Green Mouse Green Mouse chop_linebreak

在末尾没有 换行符 的字符串, 那么可以换行,否则不改变字符串。

contains Note:

这个内建函数从 FreeMarker 2.3.1 版本开始可用。 在2.3版本中是没有的。

如果函数中的参数指定的子串出现在源字符串中, 那么返回true。比如:

It contains "ice"

将会输出

It contains "ice" date, time, datetime

字符串转换成日期值,时间或日期-时间值。需要一个由 date_format, time_format 和 datetime_format 设置指定的格式。 如果字符串不是适当的格式,那么当访问该内建函数时, 就会发生错误中止模板的处理。

也可以指定明确的格式,比如 ?datetime.format 或 ?datetime["format"] (由于历史原因,也可以是 ?datetime("format")), 它们与 ?date 和 ?time是相同的。 对于格式化值的语法和意义,可以参考 date_format, time_format 和 datetime_format 设置 的可能的值。 比如:

避免误解,左侧值无需是字符串文本。比如,当从XML结点 (此处的所有值都是未被解析的字符串)读取数据,那么就需要这样来做 order.confirmDate?date.xs,将字符串转化成真实的日期。

当然,格式也可以是一个变量,比如: "..."?datetime[myFormat]。

ends_with

返回是否这个字符串以参数中指定的子串结尾。 比如 "ahead"?ends_with("head") 返回布尔值 true。"head"?ends_with("head") 也返回 true。

ensure_ends_with Note:

该内建函数从 FreeMarker 2.3.21 版本开始可用

如果字符串没有以第一个参数指定的子串结尾, 那么就会将它加到字符串后面,否则返回原字符串。比如, "foo"?ensure_ends_with("/") 和 "foo/"?ensure_ends_with("/") 返回 "foo/"。

ensure_starts_with Note:

该内建函数从 FreeMarker 2.3.21 版本开始可用

如果字符串没有以第一个参数指定的子串开头, 那么就会将它加到字符串开头,否则返回原字符串。比如, "foo"?ensure_starts_with("/") 和 "/foo"?ensure_starts_with("/") 返回 "/foo"。

如果指定两个参数,那么第一个参数就被解释成Java正则表达式, 如果它不匹配字符串的开头,那么第二个参数指定的字符串就会添加到字符串开头。 比如 someURL?ensure_starts_with("[a-zA-Z]+://", "http://") 就会检查如果字符串是否以 "[a-zA-Z]+://" 开头 (请注意,不需要 ^),如果不是的话,就添加 "http://"。

该方法也接受第三个标志位参数。因为调用两个参数暗指 "r"(也就是正则表达式模式),那么就需要第三个参数了。 值得注意的一点是当不需要第一参数被解释成正则表达式,而只是普通文本, 但是又想让比较是大小写敏感的,那么此时就需要使用 "i" 作为第三个参数。

groups

这个函数只作用于内建函数 matches 的结果。请参考 这里...。

html

字符串按照HTML标记输出。也就是说,下面字符串将会被替代:

替换为 ; & 替换为 ; " 替换为 ; 如果程序员设置了FreeMarker(将 incompatible_improvements 设置为 2.3.20 或更高;更多内容请参考 这里),那么 ' 被替换为 '。

请注意,如果想安全地插入一个属性, 必须在HTML模板中使用引号标记(是 ",而不是 ')为属性值加引号:

请注意,在HTML页面中,通常想对所有插值使用这个内建函数。 所以可以使用 escape 指令 来节约很多输入,减少偶然错误的机会。

index_of

返回第一次字符串中出现子串时的索引位置。 例如 "abcabc"?index_of("bc") 将会返回1 (不要忘了第一个字符的索引是0)。而且,你可以指定开始搜索的索引位置: "abcabc"?index_of("bc", 2) 将会返回4。 这对第二个参数的数值没有限制:如果它是负数,那就和是0是相同效果了, 如果它比字符串的长度还大,那么就和它是字符串长度那个数值是一个效果。 小数会被切成整数。

如果第一个参数作为子串没有在该字符串中出现时 (如果你使用了第二个参数,那么就从给定的序列开始),那么就返回-1。

j_string

根据Java语言字符串转义规则来转义字符串, 所以它很安全的将值插入到字符串类型中。要注意它 不会 在被插入的值的两侧添加引号; 你需要在字符串值 内部 来使用。

所有 UCS 编码下指向0x20的字符会被转义。 当它们在Java语言中(比如\n,\t等) 没有专门的转义序列时,将会被用UNICODE进行转义替换 (\uXXXX)。

例如:

String BEAN_NAME = "${beanName?j_string}";

将会输出:

String BEAN_NAME = "The \"foo\" bean."; js_string

根据JavaScript语言字符串转义规则来转义字符串, 所以它很安全的将值插入到字符串类型中。要注意, 它不会在被插入的值两侧添加引号; 你需要在字符串值 内部 来使用。

引号(")和单引号(')要被转义。 从 FreeMarker 2.3.1 开始,也要将 > 转义为 \>(为了避免 )。

所有在 UCS 编码下指向0x20的字符将会被转义。 当它们在JavaScript中没有专用的转义序列时 (比如 \n,\t 等), 它们会被UNICODE字符代替(\uXXXX)。

例如:

alert("Welcome ${user?js_string}!");

将会输出:

alert("Welcome Big Joe\'s \"right hand\"!"); json_string

根据JSON语言的字符串规则来转义字符串, 所以在字符串中插入值是安全的。 要注意它 不会 在被插入的值两侧添加引号; 你需要在字符串值 内部 来使用。

这不会转义 ' 字符,因为JSON字符串必须使用 " 来括起来。它会在 字符为 \u003E,来避免退出XML的 CDATA 段。

所有在 UCS 编码下指向0x20的字符会被转义。 当在JSON中没有专用的转义序列时 (比如 \n,\t 等), 它们会被UNICODE字符代替(\uXXXX)。

keep_after Note:

该内建函数从 FreeMarker 2.3.21 版本开始可用。

移除字符串中的一部分内容,该部分是给定子串第一次出现之前的部分。 比如:

${"abcdefgh"?keep_after("de")}

将会输出

fgh

如果参数字符串没有找到,它会返回空串。如果参数是长度为0的字符串, 它会返回源字符串,不会改变。

该方法接受可选的 标志位参数,作为它的第二个参数:

${"foo : bar"?keep_after(r"\s*:\s*", "r")}

将会输出

bar keep_after_last Note:

该内建函数从 FreeMarker 2.3.22 版本开始可用。

和 keep_after 相同, 但是它会保留参数最后一次出现后的部分,而不是第一次。比如:

${"foo.bar.txt"?keep_after_last(".")}

将会输出

txt

若使用 keep_after 则会得到 bar.txt。

keep_before Note:

该内建函数从 FreeMarker 2.3.21 版本开始可用。

移除字符串的一部分,该部分是从给定子串开始的部分。 比如:

${"abcdef"?keep_before("de")}

将会输出

abc

如果参数字符串没有找到,它会返回源字符串,不会改变。 如果参数是长度为0的字符串,它会返回空串。

该方法接受可选的 标志位参数,作为它的第二个参数:

${"foo : bar"?keep_before(r"\s*:\s*", "r")}

将会输出

foo keep_before_last Note:

该内建函数从 FreeMarker 2.3.22 版本开始可用。

和 keep_before 相同, 但是保留参数最后一次出现之前的部分,而不是第一次出现之前。比如:

${"foo.bar.txt"?keep_after_last(".")}

将会输出

foo.bar

若使用 keep_before 则会得到 foo。

last_index_of

返回最后一次(最右边)字符串中出现子串时的索引位置。 它返回子串第一个(最左边)字符所在位置的索引。例如: "abcabc"?last_index_of("ab"):将会返回3。 而且可以指定开始搜索的索引。例如, "abcabc"?last_index_of("ab", 2),将会返回0。 要注意第二个参数暗示了子串开始的最大索引。对第二个参数的数值没有限制: 如果它是负数,那么效果和是零的一样,如果它比字符串的长度还大, 那么就和它是字符串长度那个数值是一个效果。小数会被切成整数。

如果第一个参数作为子串没有在该字符串中出现时 (如果你使用了第二个参数,那么就从给定的序列开始),那么就返回-1。

left_pad Note:

该内建函数从 FreeMarker 2.3.1 版本开始可用。

如果它仅仅用1个参数,那么它将在字符串的开始插入空白, 直到整个串的长度达到参数指定的值。 如果字符串的长度达到指定数值或者比指定的长度还长, 那么就什么都不做了。比如这样:

[${""?left_pad(5)}] [${"a"?left_pad(5)}] [${"ab"?left_pad(5)}] [${"abc"?left_pad(5)}] [${"abcd"?left_pad(5)}] [${"abcde"?left_pad(5)}] [${"abcdef"?left_pad(5)}] [${"abcdefg"?left_pad(5)}] [${"abcdefgh"?left_pad(5)}]

将会输出:

[ ] [ a] [ ab] [ abc] [ abcd] [abcde] [abcdef] [abcdefg] [abcdefgh]

如果使用了两个参数,那么第一个参数表示的含义和你使用一个参数时的相同, 第二个参数指定用什么东西来代替空白字符。比如:

[${""?left_pad(5, "-")}] [${"a"?left_pad(5, "-")}] [${"ab"?left_pad(5, "-")}] [${"abc"?left_pad(5, "-")}] [${"abcd"?left_pad(5, "-")}] [${"abcde"?left_pad(5, "-")}]

将会输出:

[-----] [----a] [---ab] [--abc] [-abcd] [abcde]

第二个参数也可以是个长度比1大的字符串。 那么这个字符串会周期性的插入,比如:

[${""?left_pad(8, ".oO")}] [${"a"?left_pad(8, ".oO")}] [${"ab"?left_pad(8, ".oO")}] [${"abc"?left_pad(8, ".oO")}] [${"abcd"?left_pad(8, ".oO")}]

将会输出:

[.oO.oO.o] [.oO.oO.a] [.oO.oOab] [.oO.oabc] [.oO.abcd]

第二个参数必须是个字符串值,而且至少有一个字符。

length

字符串中字符的数量。

lower_case

字符串的小写形式。比如 "GrEeN MoUsE"?lower_case 将会是 "green mouse"。

matches

这是一个"超级用户"函数。如果不懂 正则表达式,就忽略它吧。

该内建函数决定了字符串是否精确匹配模式。而且,它会返回匹配子串的列表。 返回值是多类型值:

布尔值:如果字符串整体匹配了模式,就是 true, 否则就是 false。比如:"fooo"?matches('fo*') 就是 true,但是 "fooo bar"?matches('fo*') 是 false。

序列:字符串匹配的子串的列表。很有可能是长度为0的序列。

比如:

Matches.Does not match. Matches.Does not match. Matching sub-strings: - ${m}

将会输出:

Matches. Does not match. Matching sub-strings: - foo - fyo

如果正则表达式包含分组(圆括号),那么可以使用 groups 内建函数来访问它们:

First name: ${res?groups[1]} Second name: ${res?groups[2]} - "${m}" is "${m?groups[1]}" per "${m?groups[2]}"

将会输出:

First name: John Second name: Doe - "aa/rx;" is "a" per "a/rx" - " ab/r;" is " " per "ab/r"

请注意,上面的 groups 对子串匹配和整个字符串匹配的结果都起作用。

matches 接受可选的第二参数, 标志位。请注意, 它不支持标志 f,也会忽略 r 标志。

number

字符串转化为数字格式。这个数字必须是 "计算机语言" 格式。也就是说, 它必须是本地化独立的形式,小数的分隔符就是一个点,没有分组。

该内建函数识别FreeMarker模板语言使用的数字格式。此外, 它也识别科学记数法(比如 "1.23E6","1.5e-8") 从 FreeMarker 2.3.21 版本开始,它也识别所有XML Schema数字格式,比如 NaN,INF,-INF, 还有Java本地格式Infinity 和 -Infinity。

如果字符串不是适当的格式,当尝试访问该内建函数时就会发生错误, 并中止模板执行。

实际上,字符串是由当前 arithmetic_engine 的 toNumber 方法解析的,这是可以配置的设置项。不过该方法应该和上面描述的行为相似。

replace

在源字符串中,用另外一个字符串来替换原字符串中出现它的部分。 它不处理词的边界。比如:

${"this is a car acarus"?replace("car", "bulldozer")}

将会输出:

this is a bulldozer abulldozerus

替换是从左向右执行的。这就意味着:

${"aaaaa"?replace("aaa", "X")}

将会输出:

Xaa

如果第一个参数是空字符串,那么所有的空字符串将会被替换, 比如 "foo"?replace("","|"),就会得到 "|f|o|o|"。

replace 接受可选的 标志位参数,作为它的第三参数。

right_pad Note:

该内建函数从 FreeMarker 2.3.1 版本开始可用。 在2.3版本中是没有的。

它和 left_pad 相同, 但是它从末尾开始插入字符而不是从开头。

比如:

[${""?right_pad(5)}] [${"a"?right_pad(5)}] [${"ab"?right_pad(5)}] [${"abc"?right_pad(5)}] [${"abcd"?right_pad(5)}] [${"abcde"?right_pad(5)}] [${"abcdef"?right_pad(5)}] [${"abcdefg"?right_pad(5)}] [${"abcdefgh"?right_pad(5)}] [${""?right_pad(8, ".oO")}] [${"a"?right_pad(8, ".oO")}] [${"ab"?right_pad(8, ".oO")}] [${"abc"?right_pad(8, ".oO")}] [${"abcd"?right_pad(8, ".oO")}]

将会输出:

[ ] [a ] [ab ] [abc ] [abcd ] [abcde] [abcdef] [abcdefg] [abcdefgh] [.oO.oO.o] [aoO.oO.o] [abO.oO.o] [abc.oO.o] [abcdoO.o] remove_beginning Note:

该内建函数从 FreeMarker 2.3.21 版本开始可用。

从字符串的开头移除参数中的子串,如果它不以参数中的子串开头, 那么就或者返回原字符串。比如:

${"abcdef"?remove_beginning("abc")} ${"foobar"?remove_beginning("abc")}

将会输出:

def foobar remove_ending Note:

该内建函数从 FreeMarker 2.3.21 版本开始可用。

从字符串的结尾移除参数中的子串,如果它不以参数中的子串结尾, 那么就或者返回原字符串。比如:

${"abcdef"?remove_ending("def")} ${"foobar"?remove_ending("def")}

将会输出:

abc foobar rtf

字符串作为富文本(RTF 文本),也就是说,下列字符串:

\ 替换为 \\

{ 替换为 \{

} 替换为 \}

split

它被用来根据另外一个字符串的出现将原字符串分割成字符串序列。 比如:

- ${x}

将会输出:

- some - test - text

请注意,假设所有的分隔符都在新项之前出现 (除了使用 "r" 标志 - 后面详细介绍) 因此:

- "${x}"

将会输出:

- "some" - "" - "test" - "text" - ""

split 接受可选的 标志位参数, 作为它的第二个参数。由于历史使用 r (正则表达式)标志的差错;它会从结果列表中移除空元素, 所以在最后示例中使用 ?split(",", "r"), "" 会从输出中消失。

Note:

要检查一个字符串是否以...结尾或者要附加它, 使用 ensure_ends_with 内建函数。

starts_with

如果字符串以指定的子字符串开头,那么返回true。 比如 "redirect"?starts_with("red") 返回布尔值 true,而且 "red"?starts_with("red") 也返回 true。

Note:

要检查一个字符串是否以...开头或者要在前面附加它, 使用 ensure_starts_with 内建函数。

string (当被用作是字符串值时)

什么也不做,仅仅返回和其内容一致的字符串。例外的是, 如果值是一个多类型的值(比如同时有字符串和序列两种), 那么结果就只是一个简单的字符串,而不是多类型的值。 这可以被用来防止人为多输入。

substring (已废弃) Note:

从 FreeMarker 2.3.21 版本开始,该内建函数被废弃,由 字符串切分 替代,比如 str[from..



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3